import os
import random
import json
import datetime
from generation_data import GenerationData
from writeToJsonFile import JsonWriter


def get_vin(number: int) -> list:
    """
    用来生成指定数量的车架号

    param:number    生成多少量车的数据
    return: 返回一个列表
    """
    vin_set = set()  # 创建一个空集合
    for i in range(number):
        vins = ''.join(random.choices(
            '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', k=17))  # 车架号
        if vins not in vin_set:
            vin_set.add(vins)
    return list(vin_set)


if __name__ == '__main__':
    # 生成数据
    vins_list = get_vin(300)  # 生成100辆车的数据
    data_list = []
    while True:
        try:
            vin = vins_list.pop()  # 随机取出一辆，先模拟一辆车
        except IndexError:
            break
        gd = GenerationData(vin)
        data_li = gd.generation_data()
        data_list += data_li

    # 有至少20辆车的重复数据
    # sample()函数从0到列表总长度之间随机选择random.randint(20,100)整数作为重复的数据下标
    repeat_indices = random.sample(range(len(data_list)), random.randint(20, 100))
    for i in repeat_indices:
        # 返回字典中所有键值对的元素，以便同时访问字典中所有键和它们对应的值
        data = {k: v for k, v in data_list[i].items()}
        data_list.insert(i + 1, data)  # 将数据插入原数据的下一行

    jw = JsonWriter()
    jw.write_json_file(data_list)

    # 写入json文件中
    # json.dumps(data_list)
    # with open("data.json", "w", encoding="utf-8") as f:
    #     json.dump(data_list, f, ensure_ascii=False)
